use core::fmt::Write;
use std::ffi::*;

#[test]
fn test_os_string_with_capacity() {
    let mut os_string = OsString::with_capacity(12);
    os_string.write_str("as").unwrap();
    println!("{:?}", os_string.into_string());
}

#[test]
fn test_c_string_with_capacity() {
    // 创建一个 CString
    // new 会检查字符串中是否包含 null 字符（这是 C 风格字符串的终结符）
    let c_string = CString::new("Hello, C!").expect("CString::new failed");

    // 获取指向 C 风格字符串的指针
    let c_str: *const c_char = c_string.as_ptr();

    // 打印指针
    println!("C string pointer: {:?}", c_str);

    //============
    // 获取指针，模拟从 C 函数接收到的 C 风格字符串
    let c_str: *const c_char = c_string.as_ptr();

    // 将 C 风格字符串转换为 Rust 可用的 CStr
    let c_str_ref = unsafe { CStr::from_ptr(c_str) };

    // 打印 CStr 内容
    println!("C string: {:?}", c_str_ref);
}
